home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / hp48hor2 / suite3d4.src < prev    next >
Text File  |  1993-02-18  |  14KB  |  641 lines

  1. %%HP: T(3)A(R)F(.);
  2. DIR
  3.  
  4.   VPAR
  5.   DIR
  6.     Xleft
  7.       0
  8.     Xright
  9.       3
  10.     Ynear
  11.       0
  12.     Yfar
  13.       3
  14.     Zlow
  15.       -1
  16.     Zhigh
  17.       2.5
  18.     XXleft
  19.       0
  20.     XXright
  21.       3
  22.     YYlow
  23.       0
  24.     YYhigh
  25.       3
  26.     Xe
  27.       2.5
  28.     Ye
  29.       -1.5
  30.     Ze
  31.       2
  32.     Nx
  33.       13
  34.     Ny
  35.       8
  36.     Hidden
  37.       0
  38.   END
  39.  
  40.   SlopeField
  41.     \<< {VPAR Nx} RCL
  42.         {VPAR Ny} RCL
  43.         {VPAR Xleft} RCL {VPAR Xright} RCL DUP2  XRNG
  44.         {VPAR Ynear} RCL {VPAR Yfar} RCL DUP2 YRNG
  45.         EQ
  46.         0 0 0 0 0 0 0
  47.          \-> numx numy left right bot top der hstp vstp hofs vofs x y d
  48.       \<< ERASE {# 0d # 0d } PVIEW
  49.           right left - numx / 'hstp' STO
  50.            top bot - numy / 'vstp' STO
  51.            hstp .4 * 'hofs' STO
  52.            vstp .4 * 'vofs' STO
  53.            bot vstp 2 / + top
  54.         FOR y
  55.              y 'Y' STO
  56.              left hstp 2 / +
  57.              right
  58.           FOR x
  59.                x 'X' STO
  60.                der \->NUM  'd' STO
  61.                'IFTE(ABS(d*hofs)>vofs,vofs/d+i*vofs,hofs+i*hofs*d)' \->NUM
  62.                x y R\->C DUP2 + 3 ROLLD SWAP - line
  63.                hstp
  64.           STEP
  65.            vstp
  66.         STEP
  67.       \>>
  68.       { X Y } PURGE { } PVIEW
  69.     \>>
  70.  
  71.   psContour
  72.     \<<         EQ
  73.       \<< \-> dx dy 'IFTE(dy==0,MAXR,-dx/dy)' \>>
  74.       \-> eq slp
  75.       \<<
  76.         IFERR eq X \.d
  77.                eq Y \.d
  78.                2 \->LIST
  79.                'slp' APPLY
  80.                { X Y } SHOW STEQ
  81.                SlopeField
  82.         THEN eq STEQ ERRM DOERR
  83.         END eq STEQ
  84.       \>>
  85.     \>>
  86.  
  87.   YView
  88.     \<< SetWindow 0
  89.       \<< \-> K
  90.         \<<
  91.           CASE
  92.                   K TYPE DUP 0 ==
  93.             THEN
  94.                   DROP X K R\->C
  95.                   X -50 R\->C
  96.                   DUP2 LINE TLINE
  97.                   K
  98.             END
  99.                   1 ==
  100.             THEN K
  101.             END
  102.                  K EVAL 1 \->LIST
  103.                  'PRASE' APPLY
  104.           END
  105.         \>>
  106.       \>> \-> Xleft Xright Ynear Yfar Xe Ye Ze Nx Ny  prase u hline
  107.       \<< 'EQ' RCL
  108.           'u' \-> eq u
  109.         \<< eq { X '(X-Xe)*u+Xe' Y 'u+Ye' } |
  110.              Ze - 'u' / Ze +
  111.              { X u } SHOW
  112.              COLCT
  113.           IF prase
  114.           THEN { & 'hline(&)' } \|vMATCH DROP
  115.           END
  116.           IFERR
  117.               'EQ' STO 'X' INDEP
  118.               ERASE
  119.               Ynear Yfar - 8 /
  120.               \-> stp
  121.             \<< Yfar Ye -
  122.                  Ynear Ye -
  123.               FOR u
  124.                    draw
  125.                    IF KEY
  126.                    THEN DROP
  127.                    "outa here" DOERR
  128.                    END
  129.                    stp
  130.               STEP
  131.             \>>
  132.           THEN eq STEQ ERRM DOERR
  133.           ELSE eq STEQ
  134.           END
  135.            { } PVIEW
  136.         \>>
  137.       \>>
  138.     \>>
  139.  
  140.  
  141.   WIREFRAME
  142.     \<<  SetWindow 0 0 0 0
  143.          \->  Xmin Xmax Ynear Yfar Xe Ye Ze numx numy prase u v bd1 bd2
  144.       \<< 'u' 'v' \-> u v
  145.         \<< EQ { X v Y 'u+Ye' } |
  146.              Ze - 'u' / Ze +
  147.              { v u } SHOW COLCT ERASE
  148.              { # 0d # 0d } PVIEW
  149.              Ynear Yfar - numy /
  150.              Xmax Xmin - numx /
  151.              \-> eq stpu stpx
  152.           \<< Yfar Ye -
  153.                Ynear Ye -
  154.             FOR u
  155.                  0 'bd1' STO
  156.                  Xmin 'v' STO
  157.                  0 numx
  158.               START
  159.                  v Xe - u / Xe +
  160.                  eq \->NUM R\->C
  161.                  IF bd1
  162.                  THEN DUP2 line
  163.                  ELSE 1 'bd1' STO
  164.                  END
  165.                  IF bd2
  166.                  THEN numx 2 + ROLL OVER line
  167.                  END
  168.                  stpx 'v' STO+
  169.               NEXT
  170.                1 'bd2' STO
  171.                stpu
  172.             STEP
  173.              numx 1 + DROPN
  174.           \>> { } PVIEW
  175.         \>>
  176.       \>>
  177.     \>>
  178.  
  179.   ShapeToShade
  180.     \<< {VPAR Xleft} RCL
  181.         {VPAR Xright} RCL
  182.         {VPAR Ynear} RCL
  183.         {VPAR Yfar} RCL
  184.          0 0 0 \-> xmin xmax ymin ymax x y eq
  185.       \<< xmax xmin - 32 /
  186.           ymin ymax - 15.001 /
  187.            'x' 'y'
  188.            \-> xstp ystp x y
  189.         \<< EQ DUP
  190.              X \.d .4 - 2 ^ SWAP
  191.              Y \.d .4 + 2 ^ +
  192.              1 + -.35 ^
  193.              { X x Y y } | COLCT
  194.              'eq' STO
  195.              ERASE {# 0d # 0d } PVIEW
  196.              # 0d
  197.              ymax ymin
  198.           FOR y
  199.                # 0d
  200.                xmin xmax
  201.             FOR x
  202.                  DUP2 SWAP 2 \->LIST
  203.                  PICT SWAP
  204.                  eq \->NUM
  205.               IF
  206.                  DUP TYPE 0 \=/
  207.               THEN
  208.                  DROP 1
  209.               END
  210.                  tile
  211.                  15.99 * IP
  212.                  DPAR SWAP 16 - NEG GET
  213.                  REPL
  214.                  4 +
  215.                  xstp
  216.             STEP
  217.              DROP
  218.              4 +
  219.              ystp
  220.           STEP DROP { } PVIEW
  221.         \>>
  222.       \>>
  223.     \>>
  224.  
  225.   Movie
  226.     \<< {VPAR Xleft} RCL {VPAR Xright} RCL XRNG
  227.         {VPAR Zlow} RCL {VPAR Zhigh} RCL YRNG
  228.         {VPAR Ynear} RCL {VPAR Yfar} RCL
  229.         {VPAR Ny} RCL
  230.         EQ
  231.          0 0
  232.          \->  ynear yfar numy eq ystp y
  233.       \<< 'y' 'y' STO
  234.           eq { X Y } SHOW
  235.            { Y y } |
  236.            ynear yfar - numy / 'ystp' STO
  237.         IFERR STEQ
  238.               'X' INDEP
  239.               FUNCTION
  240.               0 yfar ynear
  241.           FOR y
  242.                ERASE draw
  243.                y PICT RCL ROT 2 +
  244.             IF KEY
  245.             THEN
  246.                DROP "outa here"
  247.                DOERR
  248.             END
  249.              ystp
  250.           STEP
  251.         THEN
  252.               eq STEQ
  253.               ERRM DOERR
  254.         END
  255.          eq STEQ
  256.       \>> uSMOV
  257.     \>>
  258.  
  259.   uSMOV
  260.     \<< \-> n
  261.       \<< { # 0d # 0d } PVIEW
  262.         DO n ROLL
  263.             n ROLL
  264.             DUP PICT {# 0d # 0d } ROT REPL
  265.         UNTIL KEY
  266.         END DROP n
  267.       \>>
  268.     \>>
  269.  
  270.   SSTMovie
  271.     \<<
  272.       DO
  273.         \-> n
  274.         \<< n ROLL n ROLL DUP PICT
  275.              {# 0d # 0d } ROT REPL n
  276.              { # 0d # 0d } PVIEW
  277.         \>>
  278.       UNTIL 0 WAIT
  279.             51.1 ==
  280.       END
  281.     \>>
  282.  
  283.   PARSURFACE
  284.   \<< SetWindow 3 DROPN  EQ
  285.       \-> xe ye ze  eq
  286.       \<< 4 DROPN eq LIST\-> DROP
  287.           SWAP ye - SWAP ze - OVER / ze + 'i' * 
  288.           ROT xe -  ROT /  xe + +
  289.           IFERR
  290.             STEQ
  291.             0 dogridmap
  292.           THEN eq STEQ ERRM DOERR
  293.           ELSE eq STEQ
  294.           END
  295.       \>>
  296.   \>>
  297.  
  298.   GRIDMAP
  299.  \<< 1 dogridmap \>>
  300.  
  301.   dogridmap
  302.   \<< EQ PPAR VPAR XXright XXleft YYlow YYhigh
  303.           Xleft Xright Ynear Yfar Nx Ny
  304.       UPDIR 
  305.       \-> setrng eq pp X1 X2 Y1 Y2 xr1 xr2 yr1 yr2 NX NY
  306.     \<< X2 X1 - 
  307.         Y2 Y1 -
  308.         \-> DX DY
  309.       \<< eq { X 
  310.                'X1+DX*(1+INV(NX-1))*
  311.                (.5+(-1)^IP(NY*((1-INV(NX*NY))*TTT+.5/(NX*NY)))*
  312.                (-.5+FP(NY*((1-INV(NX*NY))*TTT+.5/(NX*NY)))))-
  313.                .5*(DX/(NX-1))' 
  314.                Y 
  315.                'Y1+DY/(NY-1)*IP(NY*((1-INV(NX*NY))*TTT+.5/(NX*NY)))'
  316.               } | { TTT } SHOW 
  317.            eq { X 
  318.                'X1+DX/(NX-1)*IP(NX*((1-INV(NY*NX))*TTT+.5/(NY*NX)))' 
  319.                Y 
  320.                'Y1+DY*(1+INV(NY-1))*
  321.                (.5+(-1)^IP(NX*((1-INV(NY*NX))*TTT+.5/(NY*NX)))*
  322.                (-.5+FP(NX*((1-INV(NY*NX))*TTT+.5/(NY*NX)))))-
  323.                .5*(DY/(NY-1))'
  324.                } | { TTT } SHOW 
  325.           SWAP
  326.         IFERR { TTT 0 1 } INDEP
  327.               PARAMETRIC 
  328.               IF setrng
  329.               THEN
  330.               xr1 xr2 XRNG 
  331.               yr1 yr2 YRNG
  332.               END
  333.               NX NY * 1 - INV RES
  334.               STEQ 
  335.               ERASE pardraw
  336.               STEQ pardraw 
  337.               { } PVIEW 
  338.               pp 'PPAR' STO eq STEQ
  339.         THEN eq STEQ pp 'PPAR' STO 
  340.               ERRM DOERR
  341.         END
  342.       \>>
  343.     \>>
  344.   \>>
  345.  
  346.   DPAR {
  347. GROB 4 4 00400000
  348. GROB 4 4 00402000
  349. GROB 4 4 90000080
  350. GROB 4 4 40104010
  351. GROB 4 4 20802090
  352. GROB 4 4 8050A010
  353. GROB 4 4 50A05080
  354. GROB 4 4 A050A050
  355. GROB 4 4 50A050A0
  356. GROB 4 4 A050A070
  357. GROB 4 4 70A050E0
  358. GROB 4 4 D070D060
  359. GROB 4 4 B0E0B0E0
  360. GROB 4 4 70D0F0B0
  361. GROB 4 4 F0B0D0F0
  362. GROB 4 4 F0B0F0F0 }
  363.  
  364.   EQ
  365.     '2*(2-Y)*EXP(-((X-.5)^2+(Y-1.2)^2))+Y*EXP(-2*((X-2)^2+(Y-2)^2))'
  366.  
  367.   PPAR
  368.     { (-2,0) (2,5) X # 8d (0,0) FUNCTION Y }
  369.  
  370.   SetWindow
  371.     \<< PATH
  372.         VPAR
  373.         Xleft Xright Ynear Yfar Zlow Zhigh Xe Ye Ze Nx Ny Hidden 0
  374.        \-> Xleft Xright Ynear Yfar Zlow Zhigh Xe Ye Ze Nx Ny Hidden Ue
  375.        \<< EVAL
  376.            \<< \-> u y '(u-Ue)/(y-Ye)+Ue' SWAP OVER MAX ROT ROT MIN SWAP \>>
  377.            \-> proj
  378.            \<< Xe 'Ue' STO
  379.                MAXR \->NUM DUP NEG
  380.                Xleft Ynear proj EVAL
  381.                Xleft Yfar proj EVAL
  382.                Xright Ynear proj EVAL
  383.                Xright Yfar proj EVAL
  384.                XRNG
  385.                Ze 'Ue' STO
  386.                MAXR \->NUM DUP NEG
  387.                Zlow Ynear proj EVAL
  388.                Zlow Yfar proj EVAL
  389.                Zhigh Ynear proj EVAL
  390.                Zhigh Yfar proj EVAL
  391.                YRNG
  392.            \>>
  393.            Xleft Xright Ynear Yfar Xe Ye Ze Nx Ny Hidden
  394.       \>>
  395.    \>>
  396.  
  397.  
  398.   draw
  399.     DRAW
  400.  
  401.   line
  402.     LINE
  403.  
  404.   tile
  405.    \<< \>>
  406.  
  407.   pardraw
  408.     DRAW
  409.  
  410. @ Begin POSTSCRIPT Stuff @
  411.  
  412.   PSTOGGLE
  413.    \<< "PS is "
  414.      IF 'draw' RCL 'PSDRAW' SAME
  415.      THEN { DRAW } 1    GET DUP 'draw' STO
  416.           'pardraw' STO 
  417.           { LINE } 1 GET 'line'    STO
  418.           \<<  \>> 'tile' STO
  419.          "Off" +
  420.      ELSE 'PSDRAW' 'draw' STO 
  421.           'PSLINE'  'line' STO 
  422.           'PSTILE'  'tile' STO
  423.           'PSPARDRAW'  'pardraw' STO 
  424.           "On" +
  425.      END 1 DISP
  426.    \>>
  427.    
  428.   PSRESET
  429.     \<< "'PSOUT" 'PSOUT'
  430.         DO "" SWAP STO
  431.             "&" + DUP STR\-> DUP
  432.          UNTIL VTYPE -1 ==
  433.          END
  434.          DROP2 'PSOUT' 'CURRENTOUT' STO
  435.     \>>
  436.  
  437.   PSTILE
  438.     \<< DUP \->STR
  439.         " g
  440. "
  441.          + 5 PICK B\->R
  442.          DUP 4 + \->STR " " +
  443.          SWAP \->STR " " +
  444.          8 PICK # 64d SWAP - B\->R
  445.          DUP 4 - \->STR
  446.          " " + SWAP \->STR " " +
  447.          \-> X2 X1 Y1 Y2
  448.       \<< X2 + Y1 +
  449. "m
  450. "
  451.       + X2 + Y2 +
  452. "L
  453. "
  454.       + X1 + Y2 +
  455. "L
  456. "
  457.       + X1 + Y1 +
  458. "L
  459. "
  460.       + X2 + Y1 +
  461. "L
  462. f
  463. "
  464.       +
  465.       \>> PSADDTO
  466.     \>>
  467.  
  468.   PSADDTO
  469.     \<<
  470.       IF CURRENTOUT SIZE 4000 >
  471.       THEN 'CURRENTOUT' RCL \->STR
  472.            1 OVER SIZE 1 - SUB "&" + STR\->
  473.             DUP 'CURRENTOUT' STO STO
  474.       ELSE
  475.            'CURRENTOUT' RCL SWAP STO+
  476.       END
  477.     \>>
  478.  
  479.   CURRENTOUT
  480.     PSOUT
  481.  
  482.   PSCOPAIR
  483.     \<< 'PPAR(1)' EVAL DUP
  484.         'PPAR(2)' EVAL SWAP -
  485.          \-> p1 p2 o d
  486.       \<< p2 o - C\->R
  487.           d C\->R ROT SWAP / 64 *
  488.            ROT ROT / 131 *
  489.            p1 o - C\->R d C\->R
  490.            ROT SWAP / 64 *
  491.            ROT ROT / 131 *
  492.       \>> \-> y2 x2 y1 x1
  493.       \<< x1 \->STR " " +
  494.           y1 \->STR " " + +
  495.            x2 \->STR " " + +
  496.            y2 \->STR " " + +
  497.            x2 x1 - x2 + \->STR " " +
  498.            y2 y1 - y2 + \->STR " " + +
  499.       \>>
  500.     \>>
  501.  
  502.   PSDRAW
  503.     \<< PPAR OBJ\-> 4 DROPN
  504.         0 0
  505.          \-> hm vm indp rs flop \Gdx
  506.       \<<
  507.         IF rs TYPE 10 ==
  508.         THEN rs # 0d 2 \->LIST PX\->C hm - RE
  509.         ELSE
  510.           IF rs 0 ==
  511.           THEN { # 1d # 0d } PX\->C hm - RE
  512.           ELSE rs
  513.           END
  514.         END
  515.          3 / '\Gdx' STO
  516.          'EQ' RCL 'vm' STO
  517.         \<< \-> vl
  518.           \<< vl \->NUM
  519.                indp \->NUM
  520.                \-> vlu indv
  521.             \<<
  522.               IF flop
  523.               THEN indv \Gdx - vl indp \.d \->NUM
  524.                     \Gdx *
  525.                     vlu SWAP - R\->C
  526.                     'indp+vl*i' \->NUM PSCOPAIR
  527.                     3 ROLLD + "c
  528. "
  529.                     +
  530.                     PSADDTO
  531.               ELSE
  532.                     'indp+vl*i' \->NUM
  533.                     PSCO "m
  534. "
  535.                    +
  536.                     indv \Gdx +
  537.                     vl indp \.d \->NUM
  538.                     \Gdx * vlu + R\->C PSCO +
  539.                     1 'flop' STO
  540.               END
  541.                vlu
  542.             \>>
  543.           \>>
  544.         \>> 'hm' STO
  545.         IFERR vm {& 'hm(QUOTE(&))' } \|vMATCH DROP STEQ
  546.                DRAW vm STEQ
  547.         THEN vm STEQ ERRM DOERR
  548.         END "S
  549. "
  550.         PSADDTO
  551.       \>>
  552.     \>>
  553.  
  554.   PSPARDRAW
  555.     \<< 'PPAR(3)' EVAL OBJ\-> DROP 'PPAR(4)' EVAL 0 0
  556.         \-> indp hm vm rs flop \Gdx
  557.       \<<
  558.         IF rs 0 ==
  559.         THEN # 1d 'rs' STO
  560.         END
  561.         IF rs TYPE 10 ==
  562.         THEN rs B\->R 131 / vm hm - *
  563.         ELSE rs
  564.         END 3 / '\Gdx' STO 'EQ' RCL 'vm' STO
  565.         \<< \-> vl
  566.           \<< vl \->NUM indp \->NUM
  567.               \-> vlu indv
  568.             \<<
  569.               IF flop
  570.               THEN vl indp \.d \->NUM \Gdx * vlu SWAP - (0,0) + vlu (0,0) +
  571.                    PSCOPAIR 3 ROLLD +
  572. "c
  573. "                  + PSADDTO
  574.               ELSE vlu (0,0) + PSCO
  575. "m
  576. "
  577.                    + vl indp \.d \->NUM \Gdx * vlu + (0,0) + PSCO +
  578.                     1 'flop' STO
  579.               END
  580.               vlu
  581.             \>>
  582.           \>>
  583.         \>> 'hm' STO
  584.         IFERR vm { & 'hm(QUOTE(&))' } \|vMATCH DROP STEQ
  585.               DRAW vm STEQ
  586.         THEN vm STEQ ERRM DOERR
  587.         END
  588. "S
  589. "
  590.         PSADDTO
  591.       \>>
  592.     \>>
  593.  
  594.   PSCO
  595.     \<< 'PPAR(1)' EVAL - C\->R
  596.         'PPAR(2)-PPAR(1)' EVAL C\->R
  597.          ROT SWAP / 64 *
  598.          ROT ROT / 131 * \->STR
  599.          " " + SWAP \->STR
  600.          " " + +
  601.     \>>
  602.  
  603.   PSLINE
  604.     \<< \-> C1 C2
  605.       \<< C1 PSCO
  606. "m
  607. "
  608.           + C2 PSCO +
  609. "l
  610. S
  611. "
  612.           + PSADDTO
  613.            C1 C2 LINE
  614.       \>>
  615.     \>>
  616.  
  617.   derFP
  618.     \<< \-> K DK 'DK'    \>>
  619.   derIP
  620.     \<< \-> K DK '0'   \>>
  621.   derIM
  622.     \<< \-> K DK 'IM(DK)'   \>>
  623.   derRE
  624.     \<< \-> K DK 'RE(DK)'   \>>
  625.  
  626.   PSOUT
  627.    ""
  628.   PSOUT&
  629.    ""
  630.   PSOUT&&
  631.    ""
  632.   PSOUT&&&
  633.    ""
  634.   PSOUT&&&&
  635.    ""
  636.   PSOUT&&&&&
  637.    ""
  638.   PSOUT&&&&&&
  639.    ""
  640. END
  641.